{
 "cells": [
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_rnsga2:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## R-NSGA-II"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The implementation details of this algorithm can be found in Reference Point Based Multi-Objective Optimization Using Evolutionary Algorithms <cite data-cite=\"rnsga2\"></cite>. \n",
    "The algorithm follows the general outline of NSGA-II with modified survival selection. \n",
    "\n",
    "In R-NSGA-II individuals are first selected frontwise. By doing so, there will be the situation where a front needs to be split because not all individuals are allowed to survive. \n",
    "In this splitting front, solutions are selected based on rank."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The rank is calculated as the euclidean distance to each reference point, the solution closest to a reference point is thus assigned a rank of 1. The best rank for each solution is selected as the rank of that solution. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"display: block;margin-left: auto;margin-right: auto;width: 80%;\">\n",
    "![nsga2_survival](../resources/images/rnsga2.png)\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next solutions are selected for each reference point frontwise based on rank, after each reference point has selected a solution for survival all solutions within epsilon distance of surviving solutions are \"cleared.\" This means that they can not be selected for survival until and unless every front has been processed and more solutions still need to be selected.\n",
    "\n",
    "This means smaller epsilon values will result in a tighter set of solutions."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "code": "algorithms/usage_rnsga2.py"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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q/4g733sjLx385u7XtZek+T2lRm+8KR8/eK/ts45AH3Fk3IAoONOOfqAzN97j5x75T457fan5R07X5plQ92ZOX3kQfxQhnPs987KRd9ZmTV77ZdjDn1WDj7mRKXtAPQ0oRwA6IonxpwflpXrT87NP/2PPPs/V2fdhjty/6b78js7Xzbl9c3HGio1v7nzFckDSW5IcsOfKm0HoKcJ5QBAV2055vxleWz93TntglU5auimLB36QUevNTbk15qU21cmF746OfTE5MD/khz8Qk/PAegZxpQDANNqZJ3zv+nC+uZjn7o/8W9rnQPQm4RyAGDanXL0Afnvv/WmfHSvd07L+uajWescgF4ilAMAjVi+YE7OeNdZ+dErP5U79l7S0bHlWzN2rfNbPvabyXXnJXd1ZyI6ANgaY8oBgEbtv+SEZMkJrVB8y1dz93e/nH3+3xUZKk8eI95pQyU5+IefTX742daBkUnhZs1Lbvlq8simZLfZxqED0DVCOQDQG+YuSuYuypxlZ+TqL16c3a/9q64tozaemtakcPXCV2XcvwOYxR2ALlC+DgD0nBedcHIeO/0Lefec8/KJzS/J8DSMNy+j9uOOb799ZXLRScmai7rfGQBmDKEcAOhJyxfMyf9826/neW//h3zjF9+f4favLWPzcjcmiJuwZL4OJ59/h5nbAegYoRwA6GkL583O80/+vQydfmnyrOc/qbR8uiaIe1wdTr76l9N8UQAGlTHlAEB/OPi41nbXjVnzlc/m6u/cnDn5WV6/0xXZaRqDeWvs+deTH/xLcuiJ03dhAAaSUA4A9Je5i7L45EV5aPHdOffKdfnehgNz9s4fy06ldn229uSJsef59G/kvrnH5Kkv+2OTvwEwaUI5ANCXli+Yk+UL5uSmOw/LFauOymE3n5/5962ZtuvXmjz1rutTL3x1ymGvSV7w+5ZNA2CHCeUAQF9bOG92Fr7y1CSnTuta5yNtltTku59pbZZNA2AHmegNABgccxcly87InN/+TL667KO5bnjRtE0EV5Pk9pUZvvCk/PgrH52eiwLQ9zwpBwAG0otOODkrDzk+7/7XKzL7jm/kueW2vHanazLUpZA+0uxQhjP36t/P1av+Lc/6xWU5+JgTlbUDMKFSu7G4J09SSlm9ePHixatXr266KwAw49x056asXH93DrjtM3nRuj/PUIanZVK4xylr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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 372,
       "width": 498
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "from pymoo.algorithms.rnsga2 import RNSGA2\n",
    "from pymoo.factory import get_problem\n",
    "from pymoo.optimize import minimize\n",
    "from pymoo.visualization.scatter import Scatter\n",
    "\n",
    "problem = get_problem(\"zdt1\", n_var=30)\n",
    "pf = problem.pareto_front()\n",
    "\n",
    "# Define reference points\n",
    "ref_points = np.array([[0.5, 0.2], [0.1, 0.6]])\n",
    "\n",
    "# Get Algorithm\n",
    "algorithm = RNSGA2(\n",
    "    ref_points=ref_points,\n",
    "    pop_size=40,\n",
    "    epsilon=0.01,\n",
    "    normalization='front',\n",
    "    extreme_points_as_reference_points=False,\n",
    "    weights=np.array([0.5, 0.5]))\n",
    "\n",
    "res = minimize(problem,\n",
    "               algorithm,\n",
    "               save_history=True,\n",
    "               termination=('n_gen', 250),\n",
    "               seed=1,\n",
    "               pf=pf,\n",
    "               disp=False)\n",
    "\n",
    "\n",
    "Scatter().add(pf, label=\"pf\").add(res.F, label=\"F\").add(ref_points, label=\"ref_points\").show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### API"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: pymoo.algorithms.rnsga2.RNSGA2\n",
    "    :noindex:"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
